package com.xyazm.order.statemachine.action;

/**
 * 状态变更父类 T 入参; R 出参; E 事件;
 * @author xuyou
 * @date 2023年01月30日 21:14
 */
public abstract class AbstractStateAction<T ,R, E>  implements StateAction<E> {

    @Override
    public void onStateChange(E event, Object context) {
        // 状态变更操作
        R r = onStateChangeInternal(event, (T) context);
        // 状态变更后置操作
        postStateChange(event, r);
    }

    /**
     * 状态变更操作
     * @author xuyou
     * 2023-01-30 21:19
     * @param event 事件
     * @param context 上下文
     * @return R 返回标准的数据，正向是OrderInfoDTO, 逆向是AfterSaleStateMachineDTO
    */
    protected abstract R onStateChangeInternal(E event, T context);


    /**
     * 状态变更后置操作
     * @author xuyou
     * 2023-01-30 21:18
     * @param event 事件
     * @param context 上下文
    */
    protected void postStateChange(E event, R context) {
        // 默认空实现，提供给子类一个钩子
    }



}
